/**
 * 递归 ——> cache（缓存每次解）——> cache包含的是和形ij有关的结果
 * 那么又可以抽象一个二维格子，每个格子依赖于上一个搭建而成，
 * 最后形成的格子即是最终解
 * 
 * dp 状态转换方程：
 * 动态规划的做法：
 *      1、尝试写出 尝试版本的解答-即暴力递归
 *      2、抛开题意，直接在递归版本上优化，
 *         ===》 改出DP版本。
 * 
 * 基于局部的子最优寻找全局最优，每走一步都是取决于前一步的最优解    
 */